#include "select_table_view.h"
#include "ui_select_table_view.h"

SelectTableView::SelectTableView(QSqlDatabase& db, QWidget *parent)
    : QWidget(parent)
    , select_ui(new Ui::SelectTableView)
    , table_model(new QSqlTableModel)
    , query_model(new QSqlQueryModel(this))
{
    select_ui->setupUi(this);
    setWindowTitle("查询窗口");

    select_db = db;

    table_model->setTable("student");                  // 设置数据表名
    // table_model->setEditStrategy(QSqlTableModel::OnFieldChange); // 编辑策略：实时提交

    select_ui->tableView->setModel(table_model);
    // select_ui->tableView->resize(600, 400);
    select_ui->tableView->verticalHeader()->setVisible(true);    // 启用行表头并显示行号
    select_ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);    // 设置列宽自适应
}

SelectTableView::~SelectTableView()
{
    delete select_ui;
}


void SelectTableView::on_cancel_pushButton_clicked()
{
    this->close();
}


void SelectTableView::on_run_sql_pushButton_clicked()
{
    QString sql_str = select_ui->textEdit->toPlainText();
    // QSqlQuery query;
    qDebug() << sql_str;

    query_model->setQuery(sql_str);
    // 检查查询是否成功
    if (query_model->lastError().isValid())
    {
        QString err = QString(query_model->lastError().text());
        qDebug() << "Query error:" << err;
        QMessageBox::warning(this, "查询错误", err);
    }
    else
    {
        qDebug() << "Query executed successfully";
        if (sql_str.isEmpty())
        {
            QMessageBox::information(this, "查询提示", "查询语句为空");
        }
        select_ui->tableView->setModel(query_model);
        table_model->select();
    }

    is_table = false;
}


void SelectTableView::on_select_all_pushButton_clicked()
{
    select_ui->tableView->setModel(table_model);
    table_model->select();

    is_table = true;
}


void SelectTableView::on_submit_pushButton_clicked()
{
    if (table_model->submitAll())
    {
        if (is_table)
        {
            QMessageBox::information(nullptr, "成功", "数据已保存到数据库");
        }
        else
        {
            QMessageBox::information(nullptr, "提示", "未修改表数据");
        }
    }
    else
    {
        QMessageBox::critical(nullptr, "错误", "提交失败：" + table_model->lastError().text());
    }
}

